/* Readonly<T> 将T中的所有属性变只读 */
// let st1: Readonly<IPersonII> = {
//     name: "steve",
//     age: 18,
//     price: 123456
// }
// st1.age = 19 // 无法为“age”赋值，因为它是只读属性


/* NonNullable<T> 从T中排出掉null和undefined类型 */
// let foo: string | null = "Hello";
// let bar: NonNullable<typeof foo> = foo; // 类型推断为 string
// console.log(typeof bar); //string

/* Partial<T> 将T中的所有属性变可选 */
// let st3: Partial<IPersonII> = {
//     // name: ""
//     // faith: "" //“faith”不在类型“Partial<IPerson>”中
// }

/* Required<T> 将T中的所有属性变必选 */
// let st4: Required<IPersonII> = {
//     name: "",
//     price: 0,
//     age: 0,
//     work() {
//         return ""
//     }
// }

/* ReturnType<F> 提取F的返回值类型 */
let st5: ReturnType<ProducerFn> = {
    name: "",
    price: 0,
}
